package cn.iocoder.yudao.module.dify.service.translationtaskrecords;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.dify.controller.admin.translationtaskrecords.vo.TranslateWorkflowTextTaskData;
import cn.iocoder.yudao.module.dify.controller.admin.translationtaskrecords.vo.TranslationTaskRecordsPageReqVO;
import cn.iocoder.yudao.module.dify.controller.admin.translationtaskrecords.vo.TranslationTaskRecordsSaveReqVO;
import cn.iocoder.yudao.module.dify.dal.dataobject.translationtaskrecords.TranslationTaskRecordsDO;
import io.github.imfangs.dify.client.exception.DifyApiException;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.springframework.web.multipart.MultipartFile;

import javax.validation.Valid;
import java.io.IOException;
import java.util.List;

/**
 * dify翻译工作流任务记录 Service 接口
 *
 * @author 芋道源码
 */
public interface TranslationTaskRecordsService {


    /**
     * 创建dify翻译工作流任务记录
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createTranslationTaskRecords(@Valid TranslationTaskRecordsSaveReqVO createReqVO);

    /**
     * 更新dify翻译工作流任务记录
     *
     * @param updateReqVO 更新信息
     */
    void updateTranslationTaskRecords(@Valid TranslationTaskRecordsSaveReqVO updateReqVO);

    /**
     * 删除dify翻译工作流任务记录
     *
     * @param id 编号
     */
    void deleteTranslationTaskRecords(Long id);

    /**
     * 获得dify翻译工作流任务记录
     *
     * @param id 编号
     * @return dify翻译工作流任务记录
     */
    TranslationTaskRecordsDO getTranslationTaskRecords(Long id);

    /**
     * 获得dify翻译工作流任务记录分页
     *
     * @param pageReqVO 分页查询
     * @return dify翻译工作流任务记录分页
     */
    PageResult<TranslationTaskRecordsDO> getTranslationTaskRecordsPage(TranslationTaskRecordsPageReqVO pageReqVO);


    /**
     * 翻译工作流-上传文件-创建任务
     *
     * @param file   文件
     * @param userId 用户id
     * @return 编号
     */
    Long translateWorkflowUploadCreate(MultipartFile file, Long userId) throws IOException, DifyApiException;

    /**
     * 通过任务id启动工作流开始翻译
     *
     * @param id
     * @return
     * @throws DifyApiException
     * @throws IOException
     * @throws InterruptedException
     */
    Boolean startTranslateTaskById(Long id) throws DifyApiException, IOException, InterruptedException;

    Long translateWorkflowUploadCreateTask(MultipartFile file, Long userId) throws IOException, DifyApiException;

    Boolean translateWorkflowSplitFileById(Long id);

    /**
     * //拿到文件内容节点信息
     * //判断信息内容是否有中文
     * //有中文调用dify翻译
     * //翻译后返回的内容替换掉原文, 不改变原节点格式
     * //所有内容节点写成新的同格式文件
     * //上传oss
     *
     * @param fileUrl
     * @return
     * @throws IOException
     */
    TranslateWorkflowTextTaskData translateWorkflowSplitFile(String fileUrl, String userId) throws IOException;

    /**
     * 翻译工作流-文本-执行任务
     *
     * @param text
     * @param userTerm
     * @return
     * @throws DifyApiException
     * @throws IOException
     * @throws InterruptedException
     */
    TranslateWorkflowTextTaskData translateWorkflowTextExecuteTask(String text, String userTerm, String userId) throws DifyApiException, IOException;

    Long translateWorkflowCreateTask(List<String> fileUrls, Long userId);

    public TranslateWorkflowTextTaskData translateDocxFile(XWPFDocument document, String userId) throws IOException;

}